package com.demo;

import cn.hutool.core.util.StrUtil;
import com.demo.modules.entity.RoleModel;
import com.demo.modules.entity.vo.SaveDataVO;
import com.demo.modules.service.RoleService;
import com.demo.modules.service.UserService;
import com.demo.modules.service.impl.RoleServiceImpl;
import com.demo.modules.service.impl.UserServiceImpl;
import com.demo.util.function.OR;

import java.util.Objects;

/**
 * @author WuHao
 * @since 2023/8/2 10:11
 */
public class Run {

    private static UserService userService = new UserServiceImpl();
    private static RoleService roleService = new RoleServiceImpl();

    public static void main(String[] args) throws InterruptedException {
        String userId = "1";    // 用户id

        // 1. 模拟需要先查询数据是否存在，存在做相应操作，执行修改
        OR.run(userService.getById(userId), Objects::nonNull, userModel -> {
            // 对userModel对象做处理
            userModel.setAge(1);
            userService.updateById(userModel);
        });

        System.out.println("------------------------------");

        // 2. 从存储对象中获取值，如果存在做保存操作，批处理的场景
        // 如处理的数据后，将数据保存在某一个对象中、或Map，取出存储的数据判断是否为null，不为空则新增
        // 使用 OpenRunnable 可以使用lambda写法 简化代码

        // 这里模拟一个数据集合，集合中某些值在处理是可能为空，场景中是允许为空的情况
        SaveDataVO saveDataVO = new SaveDataVO();
        saveDataVO.setUserModel(null);
        saveDataVO.setRoleModel(new RoleModel());
        OR.run(saveDataVO.getRoleModel(), Objects::nonNull, roleService::save);
        OR.run(saveDataVO.getUserModel(), Objects::nonNull, userService::save);

        System.out.println("------------------------------");

        // 3. 替换if 改为函数式接口的写法
        // 这个貌似没有必要了，项目中改用if 就用if，这里我单纯的是为了好看而已，emmm......
        OR.run("123", StrUtil::isNotEmpty, () -> {
            // 逻辑处理
        });

    }

}
